// 注释代码又又又超时了
/**
 * @param {number[]} nums
 * @return {number}
 */
var subArrayRanges = function (nums) {
  let n = nums.length;
  let sum = 0;

  // 子数组的左边界
  for (let i = 0; i < n; i++) {
    let max = -Number.MAX_VALUE;
    let min = Number.MAX_VALUE;

    // 子数组的右边界
    for (let j = i; j < n; j++) {
      max = Math.max(max, nums[j]);
      min = Math.min(min, nums[j]);
      // 内部循环，每循环一次就是一个子数组，画图分析
      sum += max - min;
    }
  }

  return sum;
};

console.time("timer");
let nums = require("./static/data");
// let nums = [4, -2, -3, 4, 1];
let demo = subArrayRanges(nums);
console.log(demo);
console.timeEnd("timer");

/*
var subArrayRanges = function (nums) {
  let n = nums.length;
  let sum = 0;
  // 子数组长度:长度为1算出结果是0
  let subLength = 2;
  // 子数组长度超过原数组结束循环
  while (subLength <= n) {
    // 滑动窗口向右移动次数
    let m = n - subLength;
    // 移动次数
    for (let i = 0; i <= m; i++) {
      // 每移动一次取出子数组
      let temp = nums.slice(i,i + subLength);
      // 子数组排序
      temp.sort((a, b) => a - b);
      // 子数组差值累加
      sum += temp[temp.length-1] - temp[0];
    }
    // 循环一轮，子数组长度加一
    subLength++;
  }

  return sum;
};
*/
